const {app, dialog} = require('electron')
const {autoUpdater} = require('electron-updater')

/**
 * electron-updater会根据setFeedURL指定路径下的latest.yml中的version来判断是否需要更新，
 * 大于当前版本的version则需要更新，否则不更新
 */
function checkUpdate() {
    // 设置要检测更新的路径
    if (process.platform === 'darwin') {
        autoUpdater.setFeedURL('http://127.0.0.1:9005/darwin')
    } else {
        autoUpdater.setFeedURL('http://127.0.0.1:9005/win32')
    }

    // 检测更新
    autoUpdater.checkForUpdates().then()

    // 默认会自动下载新版本，设置 autoUpdater.autoDownload = false 则禁止自动下载

    // 监听"error"事件
    autoUpdater.on('error', (err) => {
        console.error('error', err)
    })

    // 监听"update-available"事件，发现有新版本时触发
    autoUpdater.on('update-available', () => {
        dialog.showMessageBox({
            type: 'info',
            title: '应用更新',
            message: '发现新版本，是否更新？',
            buttons: ['是', '否']
        }).then(res => {
            // 选择是，则退出程序，安装新版本
            if (res.response === 0) {
                // 执行下载安装包
                autoUpdater.downloadUpdate().then();
            }
        })
    })

    // 监听"download-progress"事件，下载中时触发
    autoUpdater.on("download-progress", function (progress) {
        // 下载进度
        console.log('download-progress', progress)
    })

    // 监听"update-downloaded"事件，新版本下载完成时触发
    autoUpdater.on('update-downloaded', () => {
        dialog.showMessageBox({
            type: 'info',
            title: '应用更新',
            message: '新版本下载完成，是否立即安装？',
            buttons: ['是', '否']
        }).then(res => {
            // 选择是，则退出程序，安装新版本
            if (res.response === 0) {
                autoUpdater.quitAndInstall()
                app.quit()
            }
        })
    })
}

module.exports = {
    checkUpdate
}